package net.wofly.right.service;

import java.util.List;

import org.springframework.web.multipart.MultipartFile;

import net.wofly.common.persistence.PageWrapper;
import net.wofly.common.util.ReturnBean;
import net.wofly.right.domain.Customer;
import net.wofly.right.domain.Organization;
import net.wofly.right.domain.Role;
import net.wofly.right.domain.User;
import net.wofly.right.domain.UserRole;

/**
 * 权限服务类
 * <p>
 * <ul>
 * <li>角色暂不用界面</li>
 * <li>功能列表及权限配置暂不要界面配置</li>
 * <li></li>
 * </ul>
 *
 * @author lign
 * @version 1.0
 * @created 22-9月-2017 19:35:47
 */
public interface IRightService {
    
    /**
     * 添加员工
     *
     * @param user
     */
    public ReturnBean<User> addUser(User user);
    
    /**
     * 添加组织机构
     * <ul>
     * <li>添加组织机构时，如果组织机构有仓库，则在仓库表中自动为组织机构创建仓库，并将仓库ID回写到组织机构表中</li>
     * </ul>
     *
     * @param organization
     */
    public ReturnBean<Organization> addOrganization(Organization organization);
    
    /**
     * 删除员工
     * <ul>
     * <li>将员工置为无效</li>
     * </ul>
     *
     * @param userID
     */
    public ReturnBean<User> delUser(String userID);
    
    /**
     * 删除组织机构
     * <ul>
     * <li>将组织机构置为无效。</li>
     * <li>如果有仓库也置为无效</li>
     * <li></li>
     * </ul>
     *
     * @param organizationID
     */
    public ReturnBean<String> delOrganization(String organizationID);
    
    /**
     * 获取所有员工
     * <ul>
     * <li>flag=1　获取有效的员工</li>
     * <li>flag=0　获取无效的员工</li>
     * <li>flag=-1　获取所有的员工</li>
     * </ul>
     *
     * @param flag
     */
    public ReturnBean<PageWrapper<User>> getAllUser(Integer flag, Integer pageNum, Integer pageSize);
    
    /**
     * 获取所有组织机构
     * <ul>
     * <li>flag=1时，只取所有有效的组织机构；flag=0时，只取所有无效的组织机构，flag=-1返回所有组织机构</li>
     * <li>排列机构的父子关系</li>
     * <li></li>
     * </ul>
     *
     * @param flag
     */
    public ReturnBean<List<Organization>> getAllOrganization(Integer flag);
    
    /**
     * 获取所有员工
     * <ul>
     * <li>flag=1　获取有效的员工</li>
     * <li>flag=0　获取无效的员工</li>
     * <li>flag=-1　获取所有的员工</li>
     * </ul>
     *
     * @param organizationID
     */
    public ReturnBean<List<User>> getUserByOrganization(String organizationID, Integer flag);
    
    /**
     * 获取所有员工
     * <ul>
     * <li>flag=1　获取有效的员工</li>
     * <li>flag=0　获取无效的员工</li>
     * <li>flag=-1　获取所有的员工</li>
     * </ul>
     *
     * @param roleID
     */
    public ReturnBean<List<User>> getUserByRole(String roleID);
    
    /**
     * 获取业务经理及店员列表
     *
     * 
     */
    public ReturnBean<List<User>> getBussManagerAndClerk() ;
    
    /**
     * 获取员工角色列表
     *
     * @param userID
     */
    public ReturnBean<List<Role>> getUserRole(String userID);
    
    /**
     * @param userRole
     */
    public ReturnBean<String> setUserRole(UserRole userRole);
    
    /**
     * 修改员工
     * <ul>
     * <li></li>
     * </ul>
     *
     * @param user
     */
    public ReturnBean<User> updateUser(User user);
    
    /**
     * 更新组织机构
     * <ul>
     * <li>如果以前组织机构没有仓库可以修改为有仓库，自动在仓库中为组织机构生成仓库，并将仓库ID回写到组织机构表中</li>
     * <li>如果以前组织机构有仓库则不可以修改为无仓库。或其它仓库类型</li>
     * <li></li>
     * </ul>
     *
     * @param organization
     */
    public ReturnBean<Organization> updateOrganization(Organization organization);

    public ReturnBean<String> login( String mobile, String password);

    /**
     * 修改手机号
     * <ol>
     * 	<li>第一步是通过新手机号发送验证码。与注册发送验证码共同接口。</li>
     * 	<li>第二步，验证当前用户密码是否正确。</li>
     * 	<li>再验证手机号是否己注册</li>
     * 	<li>最后验证手机及手机验证码。都正确后，新当前用户手机号改为新手机号</li>
     * </ol>
     *
     * @param userID
     * @param pwd
     * @param newMobile
     * @param verifyCode
     */
    public ReturnBean<String> changeMobile(String userID, String pwd, String newMobile, String verifyCode);

    /**
     * 通过手机，找回密码
     * <ol>
     * 	<li>第一步是通过手机号发送验证码，可以与手机注册共用一个接口</li>
     * 	<li>当前接口是第二步，通过手机号，验证码，设置新密码。</li>
     * 	<li>验证手机号与验证码有效，且在有效时间内，提示用户新密码修改成功</li>
     * </ol>
     *
     * @param mobile
     * @param verifyCode
     * @param newPwd
     */
    public ReturnBean<String> findPwdByMobile(String mobile, String verifyCode, String newPwd);

    /**
     * 获取用户信息
     * <ol>
     * 	<li>包括头像路径</li>
     * </ol>
     *
     * @param userID
     */
    public ReturnBean<User> getUser(String userID);

    /**
     * 修改密码
     * <ol>
     * 	<li>通过旧密码修改为新密码。旧密码通过验证后，将新密码保存</li>
     * 	<li></li>
     * </ol>
     *
     * @param userID
     * @param oldPwd
     * @param newPwd
     */
    public ReturnBean<String> modifyPwd(String userID, String oldPwd, String newPwd);

    /**
     * 设置用户昵称与性别
     * <ol>
     * 	<li>昵称存User表name字段中。</li>
     * 	<li>性别：男为1，女为0.默认为-1</li>
     * </ol>
     *
     * @param userID
     * @param nickName
     * @param sex
     */
    public ReturnBean<String> setUserNickName(String userID, String nickName, Integer sex);

    /**
     * 上传用户头像
     * <ol>
     * 	<li>上传用户头像到指定位置</li>
     * 	<li>这个接口根据实际情况来改</li>
     * 	<li></li>
     * </ol>
     *
     * @param userID
     * @param headPic
     */
    public ReturnBean<String> uploadUserHeadPic(String userID, MultipartFile headPic, String path);
    
    /**
     * 获取所有门店
     */
    public ReturnBean<List<Organization>> getAllShop();
    
    /**
     * 删除客户
     * 
     * <ul>
     * * <li>将组织机构置为无效。</li>
     * <li>如果有仓库也置为无效</li>
     * <li>将组织机构下所有客户都置为无效</li>
     * <li></li>
     * </ul>
     *
     * @param organizationID
     */
    public ReturnBean<Customer> delCustomer(String customerID);
    
    /**
	 * 重启客户
	 * 
	 * @param customerID
	 * @return
	 */
	public ReturnBean<Customer> recoverCustomer(String customerID);
}